perm filename BAZ2[E,ALS] blob sn#161176 filedate 1975-06-01 generic text, type T, neo UTF8
;Definitions.
.INSERT DEFS.FAI	;The file DEFS must be assembled with this file.
IFNDEF DEBUG <DEBUG←0>
IFNDEF OLDDO <OLDDO←0>	;SET NON-ZERO TO MAKE REDOer, which recategorizes news
IFNDEF USRDO <USRDO←0>	;SET NON-ZERO TO CATEGORIZE USER'S TEXT, NOT NEWS

IFE USRDO < IFE OLDDO < REGDO←←1 ; >> REGDO←←0
IFN USRDO < IFN OLDDO < .FATAL ;ILLEGAL SWITCH COMBINATION >>

;Definitions.
.INSERT DEFS.FAI	;The file DEFS must be assembled with this file.
IFNDEF DEBUG <DEBUG←0>
IFNDEF OLDDO <OLDDO←0>	;SET NON-ZERO TO MAKE REDOer, which recategorizes news
IFNDEF USRDO <USRDO←0>	;SET NON-ZERO TO CATEGORIZE USER'S TEXT, NOT NEWS

IFE USRDO < IFE OLDDO < REGDO←←1 ; >> REGDO←←0
IFN USRDO < IFN OLDDO < .FATAL ;ILLEGAL SWITCH COMBINATION >>

;Definitions.
.INSERT DEFS.FAI	;The file DEFS must be assembled with this file.
IFNDEF DEBUG <DEBUG←0>
IFNDEF OLDDO <OLDDO←0>	;SET NON-ZERO TO MAKE REDOer, which recategorizes news
IFNDEF USRDO <USRDO←0>	;SET NON-ZERO TO CATEGORIZE USER'S TEXT, NOT NEWS

IFE USRDO < IFE OLDDO < REGDO←←1 ; >> REGDO←←0
IFN USRDO < IFN OLDDO < .FATAL ;ILLEGAL SWITCH COMBINATION >>

IFN USRDO < TITLE INDEX -- program to categorize user's text >
IFN OLDDO < TITLE REDO -- program to recategorize old news >
IFN REGDO < TITLE DOER -- categorizer of AP stories >

NOVIZ←←1 ;NON-ZERO MEANS STRIP VISUAL PAPER TAPE NBR FROM FRONT OF AP STORIES

	NOLIT↔XALL
F←0	;CODE OF WIRE WE ARE WORKING ON
A←1
B←2
C←3	;current character
D←4
E←5	;counter and temporary AC

L←6	;length of output text line.  Also, number of different keywords.
M←7
N←10

Q←11	;byte pointer into output story buffer
R←12	;temporary byte pointer

W←13	;W:Z are used as LOOKUP and ENTER block
X←14
Y←15
Z←16

P←17	;pdl pointer

;I/O channels
TO ←←0	;text output to .TXT file
TI ←←1	;text input from .TFL file
UFD←←2	;input from UFD
DAT←←3	;input from, and output to, .DAT file
DT ←←4	;deletion of old .DAT files
TX ←←5	;deletion of old .TXT files
D0 ←←6	;input/output of DATE00.DAT file
CMN←←7  ;input of common word file COMMON.DAT
ANO←←10 ;output of new NOTIF.ALL file
ANI←←11 ;input of old NOTIF.ALL file and .ADD files
NAP←←12 ;input/output of .NAP file, input of .DEL files
NOP←←13 ;output of .NAP and other notification files
;	storage allocations

IFN USRDO <
FILEXT:	0		;EXTENSION OF USER SPECIFIED FILE
USRPPN:	0		;PPN OF USER SPECIFIED FILE
>

IFE USRDO <
;XWIRES DEFINES NWIRES AND WIRES
XWIRES
>;END ¬USRDO

IFN DEBUG <

PATCH:	BLOCK 40

LSYM←←3000
SYM:	BLOCK LSYM

>;END IFN DEBUG

DSK17:	217
	SIXBIT	/DSK/
	0

IFE USRDO <
DSK417:	617		;FOR LONG BLOCK LOOKUPS
	SIXBIT	/DSK/
	0

DATE00:	BLOCK NWIRES+1	   ;FOR HOLDING DATE00.DAT FILE
DATECM:	IOWD NWIRES+1,DATE00 ;DUMP MODE CMD FOR READING/WRITING DATE00.DAT FILE
	0
>;END ¬USRDO

ANBUF:	BLOCK	200	;buffer for holding last record from .NAP file
NTOBUF←←=12		;number of records in story buffer--must hold whole story
LBUF←←200*NTOBUF
	BLOCK	200	;buffer for holding first part of record where story starts
BUF:	BLOCK	LBUF	;story buffer for collecting entire story
BUFEND←.-20		;address used for checking for story buffer overflow
TOCMD:	IOWD LBUF,BUF	;dump mode command for writing out new story in .TXT file
	0
DATCMD:	IOWD 1,DATA	;dump mode command for reading/writing .DAT goes here
	0

MAXIGN←←=30	;number of chars we are willing to ignore in from of story
TMPBUF:	BLOCK	2*MAXIGN/5

IFE USRDO <
LORIGS←←5
ORIGS:	BLOCK	LORIGS	;list of sequence numbers referenced by current story
NORIGS:	-1		;number of entries in ORIGS, minus 1
>;END ¬USRDO

LTEXT←←=600
TEXT:	BLOCK	LTEXT	;space for collecting and storing whole keywords together

LSORT←←=400
SORT:	BLOCK	LSORT	;list of sorted keywords: <link>,,<ptr into TEXT>

IFE USRDO <
TFL:	0		;negative of number of .TFL filenames in table
LTFLST←←20
	BLOCK	LTFLST	;sorted list of .TFL filenames
TFLST:			;name of this block must follow the block
>;END ¬USRDO

NUBUFS←←2
UFDBUF:	BLOCK 203*NUBUFS;buffer space for reading UFD
UBUF:	BLOCK	3	;buffer header for reading UFD
OBUF:	BLOCK	3	;output buffer header for channel NOP

NTIBUF←←2
TIBUF:	BLOCK 203*NTIBUF;buffer space for reading in .TFL files
IBUF:	BLOCK	3	;buffer header for reading .TFL files

COMMON:	BLOCK	LCOMMN	;BLOCK FOR COMMON WORDS AND THEIR PTRS
CMNCMD:	IOWD	LCOMMN,COMMON ;DUMP MODE CMD FOR READING IN COMMON WORD FILE
	0
CMFILE:	SIXBIT	/COMMON/
	SIXBIT	/DAT/
	0
IFE USRDO <
	NSPPN
>;¬USRDO
IFN USRDO <
	'USR NS'	;PPN WHERE USER'S COMMON WORD FILE LIVES
>;USRDO

IFN REGDO <
ANFILE:	SIXBIT /NOTIF/
	SIXBIT /ALL/
	0
	NSPPN
>;REGDO

INIDAT:	0
	INIDIC,,INIDIC	;FORWARD/BACKWARD PTRS TO ONLY INITIAL DICT ENTRY
	LINI,,0		;FREE WORD PTRS FOR .DAT,.TXT
	' NS',,2	;VERSION NUMBER
	BLOCK 4		;UNUSED
INIDIC←←.-INIDAT
	1,,1		;FORWARD/BACKWARD PTRS FOR ONLY DICT ENTRY
	377777,,-1	;INFINITE KEYWORD
	-1,,0		;MARK INFINITE KEYWORD AS NOT REALLY A USABLE KEYWORD
LINI←←.-INIDAT

LPDL←←30
PDL:	BLOCK	LPDL	;pushdown list

ERRBK:	SIXBIT	/DSK/	;block used to start up error-handling program
	ERRPRG		;program name goes here
	'DMP',,0
	1		;NORMAL CORE SIZE, RPG STARTUP (SA+1)
	NSPPN		;PPN OF ERROR.DMP FILE
	0		;LOG ERROR IN UNDER SAME PPN DOER IS USING

IFN REGDO <
REDOBK:	SIXBIT	/DSK/	;block used to start up REDO to recategorize .TXT
	SIXBIT	/REDO/
	'DMP',,0
	0
	NSPPN		;PPN OF REDO.DMP
>;REGDO

IFE USRDO <
WAKEBK:	SIXBIT	/<DOER>/ ;WAKEME BLOCK TO TELL SYSTEM NEVER TO START DOER
	NSPPN
	-1

CHKBK:	SIXBIT	/DSK/	;block used to start up CHK program
	SIXBIT	/CHK/	;program name goes here
	'DMP',,14	;START UP AS PHANTOM JOB
	0,,-1		;NORMAL CORE SIZE, SPECIAL STARTUP (SA-1)
	NSPPN		;PPN OF CHK.DMP FILE
	0		;LOG CHK IN UNDER SAME PPN DOER IS USING

MONTH:	FOR MON IN (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)
<	ASCII	\MON \
>
>;END ¬USRDO

STYLEN:	0		;length of current story (for notification output)
SEQNBR:	0		;sequence number of current story
ORIGIN:	0		;pointer (in left half) to original of follow-up, if any
NEWSEQ:	0		;sequence number of next story (when already seen)
EOF:	0		;flag indicating whether there is an input file open
EOFDSP:	0		;address of routine to dispatch to on EOF from .TFL file
EOSDSP:	0		;address of routine to dispatch to on End Of Story
DATIN:	0		;flag telling if .DAT file has been read in
IGNORE:	0		;number of characters we will ignore looking for story
HNGTIM:	0		;number of times we have tried to do an ENTER and failed

APMIDNIGHT←←=21*=3600	;SU-AI time in seconds when AP goes to next day
ABSMINDATE←←7113	;7-JAN-74 in DAYCNT format
ABSMAXDATE←←16502	;4-JUL-84 in DAYCNT format (PLANNED OBSOLESCENCE!)
TODAY:	0		;today's date in DAYCNT format--used as file name

APNAME:
IFN USRDO <	SIXBIT /INDEX/  >
IFE DEBUG <	SIXBIT /[DOER]/ >
IFN DEBUG <	SIXBIT /<DOER>/ >

IFE USRDO <
STYTIM:	0	;<SYSTEM DATE>,,<TIME> OF CURRENT STORY
FOUND:	BLOCK NWIRES	;ONE FLAG PER WIRE: -1 IF FOUND SOME NEWS RECENTLY
REPEAT 0 < ;NY NOW USES MORE OR LESS SAME FORMAT AS AP
LOOKBG:	NYLKBG
	APLKBG
COLEC0:	NYCOL0
	APCOL0
>;REPEAT 0
>;¬USRDO
;DOER	NEXT	NEXT1

IFE DEBUG,<
	EXIT	1,
>

IFN DEBUG, <
MOVSYM:	HRLZ	W,JOBSYM↑	;GET PTR TO SYMBOL TABLE
	CAMN	W,[SYM,,0]	;HAVE WE MOVED SYMBOLS ALREADY?
	EXIT			;YES
	HRRI	W,SYM		;ADDRESS OF NEW LOC FOR SYMBOL TABLE
	HRRM	W,JOBSYM	;MAKE NEW PTR TO SYMBOL TABLE
	HLRE	X,JOBSYM	;GET LENGTH OF SYMBOL TABLE
	MOVN	X,X		;AND MAKE IT POSITIVE
	CAILE	X,LSYM
	HALT	.		;;;NOT ENOUGH ROOM FOR MOVED SYMBOL TABLE
	ADDI	X,-1(W)		;CALCULATE ADDRESS OF LAST WORD
	BLT	W,(X)		;MOVE IT
	OUTSTR	[ASCIZ/OK/]
	EXIT
	JRST	MOVSYM		;START AT -1 TO MOVE SYMBOL TABLE
>
DOER:	RESET
IFN OLDDO <
	MOVEM	F,REWIRE#	;WIRE NUMBER OF .TXT TO BE REDONE IF DETACHED
	MOVEM	W,REDATE#	;DATE OF .TXT TO BE REDONE
>;OLDDO
	MOVE	P,[IOWD LPDL,PDL]

IFN REGDO <
	SETZM	NTDONE		;HAVEN'T DONE NOTIFICATION YET
>;REGDO

IFE USRDO <
	MOVEI	A,WAKEBK
	WAKEME	A,		;NEVER START DOER UP
	JFCL			;IGNORE WAKEME FAILURE

	MOVEI	A,INTRPT	;get address of interrupt level module
	MOVEM	A,JOBAPR↑	;store it
IFN OLDDO <
	MOVSI	A,INTPTI	;REDO changes name but doesn't trap parity errors
>;OLDDO
IFE OLDDO <
	MOVSI	A,INTPTI!INTPAR	;enable interrupts on parity errors and pty input
>;¬OLDDO
	INTENB	A,		;enable interrupts
	MOVSI	A,INTPTI
	INTGEN	A,		;generate a pty input int to set the job name
IFE OLDDO, <
	MOVE	A,NBRFLR#	;get code indicating number of other DOERs
	JRST	.+2(A)
	EXIT			;ONE OTHER DOER ALREADY EXISTED
	EXIT			;;;TWO OR MORE OTHER DOERS ALREADY EXISTED
>;END ¬OLDDO
>;END ¬USRDO

	HRROS	JOBDDT↑		;make sure SAVE gets everybody

	OPEN	CMN,DSK17	;READ IN COMMON WORD FILE
	UFATAL	100		;;;
	MOVE	A,[CMFILE,,W]
	BLT	A,Z
	LOOKUP	CMN,W		;COMMON WORD FILE
	JRST  [ LOOKUP CMN,W
		UFATAL 101	;;;FAILED TWICE TO FIND COMMON WORD FILE
		JRST	.+1]	;WHEW!
	IN	CMN,CMNCMD
	JRST	.+2
	UFATAL	103		;;;DISK INPUT ERROR
	RELEAS	CMN,

	INIT	TI,200		;prepare to read .TFL file in
	SIXBIT	/DSK/
	IBUF
	UFATAL	104		;;;CANT INIT DSK
	MOVEI	W,TIBUF
	MOVEM	W,JOBFF↑
	INBUF	TI,NTIBUF	;set up buffers in compiled in area

IFE USRDO <

ALLWIR:	SETOM	FOUND		;PRETEND WE SAW SOME FIRST WIRE NEWS

LSTWIR:	MOVEI	F,NWIRES-1	;CODE OF LAST WIRE

NXTWIR:	MOVE	A,F		;WIRE CODE
	SETZM	FOUND(A)	;NO NEWS FOUND FOR THIS WIRE YET
	SETZM	TFL		;no .TFL filenames sorted yet
>;¬USRDO
	SETZM	DATIN		;no .DAT file in core yet

IFN OLDDO <
NEXT:	PUSHJ	P,OLDTXT	;open .TXT file from specified day as .TFL file
>;OLDDO

IFN REGDO <
NEXT:	PUSHJ	P,TFLFIL	;open oldest .TFL file
	JRST  [	PUSHJ P,NETWRK	;no .TFL files, do anything needed with DC at CCA
		PUSHJ P,TFLFIL	;look again for .TFL files
		JRST DOEXIT	;still none--do any bookkeeping and exit
		JRST NEXT1]	;got one--process it
>;REDDO

IFN USRDO <
NEXT:	JRST	USRINI
>;USRDO

IFE USRDO <

NEXT1:	PUSHJ	P,SETTIM	;Get time of day for story & make sure have .dat+4K
	MOVEI	W,NEXT
	MOVEM	W,EOFDSP	;set up dispatch address for EOF
	MOVEI	W,.+2
	MOVEM	W,EOSDSP	;set up dispatch address for END OF STORY
	SETZB	C,L		;clear current character, no chars on current line
	MOVEI	W,MAXIGN	;set up counter for maximum number of chars we
	MOVEM	W,IGNORE	;  will examine in searching for story beginning
	MOVE	Q,[POINT 7,TMPBUF] ;set up byte pointer for saving story read in
;	MOVE	A,F
	JRST	APLKBG	;@LOOKBG(A)
REPEAT 0 <	;NYLKBG	NYCOLL

NYLKBG:	PUSHJ	P,GETCH		;look for beginning of a story
NYLKB3:	CAIN	C,"N"		;stories begin with "NYT 41" followed by CRLF
	JRST	NYLKB2		;maybe we got one
IFN OLDDO <
	UFATAL	105		;;;MISSING BEGINNING IN OLD .TXT FILE
>;OLDDO
IFE OLDDO <
	CAIE	C,LF		;(don't count LFs in limit of chars before beginning)
	CAIN	C,CR		; "     "     CRs
	JRST	NYLKBG
	SOSL	IGNORE		;have we looked far enough for a beginning
	JRST	NYLKBG		;no--look some more

	SETZ	C,		;yes--insert special beginning
	IDPB	C,Q		;mark end of text seen so far
	MOVE	Q,[POINT 7,BUF]	;set up byte pointer into story buffer
	MOVEI	R,=999
	MOVEM	R,SEQNBR	;give this story a special sequence number
	MOVEI	R,[ASCIZ /N999/]
	PUSHJ	P,PUTSTR	;put special sequence number into story
	PUSHJ	P,MAKTIM	;put time of categorization into story
	MOVEI	R,[ASCIZ /.../]
	PUSHJ	P,PUTSTR	;and add special message to beginning of story
	MOVEI	R,TMPBUF
	PUSHJ	P,PUTSTR	;copy text seen so far into story buffer
	JRST	NYCOLL		;and go collect rest of story
>;¬OLDDO

NYLKB2:	PUSHJ	P,GETCH
IFE OLDDO <			;NO "YT " WHEN REDOING
	CAIE	C,"Y"
	JRST	NYLKB3
	PUSHJ	P,GETCH
	CAIE	C,"T"
	JRST	NYLKB3
	PUSHJ	P,GETCH
	CAIN	C," "
	PUSHJ	P,GETCH		;SKIP OVER SPACE
>;END ¬OLDDO
	MOVEM	Q,BEGST#	;SAVE BYTE POINTER TO FIRST DIGIT
	MOVEI	E,3		;look for 3 digits of seq nbr
	SETZ	D,		;calculate seq nbr in D

NYLKB1:	CAIL	C,"0"
	CAILE	C,"9"		;is next char a digit?
	JRST	NYLK00		;no
	IMULI	D,=10
	ADDI	D,-"0"(C)	;add current digit into seq nbr value so far
	PUSHJ	P,GETCH
	SOJA	E,NYLKB1	;COUNT A DIGIT FOUND

NYLKB4:
IFE OLDDO <			;NO CRLF FOLLOWS SEQ NBR IN .TXT FILE
	CAIE	C,CR		;DIGITS MUST BE FOLLOWED BY CRLF
	JRST	NYLKB3		; BUT THEY ARE NOT
	PUSHJ	P,GETCH
	CAIE	C,LF
	JRST	NYLKB3		;must not be real beginning

	ADD	Q,[160000,,0]	;BACK UP Q TO BEFORE THE CR AFTER STORY NUMBER
	TLNE	Q,400000	;DID BYTE POINTER POSITION FIELD OVERFLOW?
	SUB	Q,[430000,,1]	;YES, ADJUST BP TO LAST BYTE IN PREVIOUS WORD
>;¬OLDDO

	MOVEM	D,SEQNBR	;GOT BEGINNING OF STORY--SAVE SEQUENCE NUMBER
	SETZ	E,
	IDPB	E,Q		;mark end of seq nbr, and erase the CR
	MOVE	R,BEGST#
	ADD	R,[070000,,0]	;BACK UP BYTE PTR TO BYTE BEFORE FIRST DIGIT
	MOVE	Q,[POINT 7,BUF]	;set up byte pointer into story buffer
	MOVEI	C,"N"
	IDPB	C,Q		;MAKE STORY START LIKE "n001"
	MOVEI	C,"0"
	SKIPLE	E,ESAVE#	;NEED ANY LEADING ZEROES
	IDPB	C,Q		;YES, FILL THEM IN
	SOJG	E,.-1
	PUSHJ	P,PUTST1	;copy ASCIZ string from TMPBUF into story buffer
IFN OLDDO <
	JRST	RECOLL		;COLLECT WHOLE STORY FROM .TXT FILE
>;OLDDO
NYCOL0:	PUSHJ	P,MAKTIM	;put time of categorization into story
	JRST	NYCOLL		;YES, READ IN WHOLE STORY

NYLK00:	CAIN	E,3		;FIND ANY DIGITS?
	JRST	NYLKB3		;NO
	JUMPL	E,NYLKB3	;JUMP IF FOUND TOO MANY DIGITS
	MOVEM	E,ESAVE#	;REMEMBER HOW MANY EXTRA LEADING ZEROES WE NEED
	JRST	NYLKB4

NYCOLL:	SETZM	TMPBUF		;HAVE NOT FOUND BEGINNING OF NEXT STORY
	MOVEI	E,ENDIT1
	MOVEM	E,EOFDSP
	MOVEI	E,ENDIT
	MOVEM	E,EOSDSP

NYCOL1:	PUSHJ	P,GETCH
NYCOL2:	CAIE	C,LF		;LOOK FOR [LF]NYT
	JRST	NYCOL1
	MOVEM	Q,QSAVE1#	;SAVE BYTE PTR TO JUST BEFORE "NYT123"
	PUSHJ	P,GETCH
	CAIE	C,"N"
	JRST	NYCOL2
	PUSHJ	P,GETCH
	CAIE	C,"Y"
	JRST	NYCOL2
	PUSHJ	P,GETCH
	CAIE	C,"T"
	JRST	NYCOL2
	PUSHJ	P,GETCH
	MOVEI	E,3		;COLLECT AT MOST 3 DIGITS
	SETZ	D,		;COLLECT SEQ NBR IN D
	CAIN	C," "		;IGNORE SPACE IF PRESENT AFTER "NYT"
	PUSHJ	P,GETCH
	MOVEM	Q,QSAVE2#	;SAVE BYTE PTR TO FIRST DIGIT
NYCOL3:	CAIL	C,"0"
	CAILE	C,"9"
	JRST	NYCOL4		;NOT A DIGIT
	IMULI	D,=10
	ADDI	D,-"0"(C)	;ADD IN CURRENT DIGIT
	SOJGE	E,NYCOL3	;COUNT A DIGIT FOUND
	JRST	NYCOL2		;TOO MANY DIGITS FOUND

NYCOL4:	CAIE	E,3		;SKIP IF NO DIGITS FOUND
	CAIE	C,CR		;SKIP IF SEQ NBR FOLLOWED BY CR
	JRST	NYCOL2
	PUSHJ	P,GETCH
	CAIE	C,LF
	JRST	NYCOL1		;CR NOT FOLLOWED BY LF
	MOVEM	D,NEWSEQ
	SETZ	D,
	IDPB	D,Q		;PUT NULL AT END OF SEQ NBR TEXT
	MOVE	R,QSAVE2
	ADD	R,[070000,,0]	;BACK UP BYTE PTR ONE BYTE
	MOVE	Q,[POINT 7,TMPBUF]
	MOVEI	C,"N"		;MARK THIS STORY AS NYT
	IDPB	C,Q
	MOVEI	C,"0"		;FILL IN MISSING LEADING ZEROES
	JUMPE	E,.+3		;JUMP IF NEED NO LEADING ZEROES
	IDPB	C,Q		;LEADING ZERO
	SOJG	E,.-1
	PUSHJ	P,PUTST1	;MOVE SEQ NBR DIGITS TO TMPBUF
	MOVE	Q,QSAVE1
	JRST	ENDIT2		;MARK CURRENT STORY WITH MISSING ENDING
>;REPEAT 0
;APCOLL	RECOLL
;THIS CODE NOW SERVICES BOTH THE AP AND THE NYT LINES

APCOLL:	MOVEI	E,ENDIT
	MOVEM	E,EOSDSP	;set up dispatch address for end of story found
	MOVEI	E,ENDIT1
	MOVEM	E,EOFDSP	;set up dispatch address for EOF
	SETZM	TMPBUF		;no new beginning seen yet.

APCOL3:	PUSHJ	P,GETCH
APCOL1:	CAIE	C,"a"		;is this possibly beginning of a story "a109<lf>"?
	JRST	APCOL3		;no

APCOL4:	MOVEI	E,3		;CHECK FOR BEGINNING STORY SEQ NBR AND LF
	SETZ	D,
APCOL2:	PUSHJ	P,GETCH
	CAIL	C,"0"
	CAILE	C,"9"
	JRST	APCOL1
	IMULI	D,=10
	ADDI	D,-"0"(C)
	SOJG	E,APCOL2
	PUSHJ	P,GETCH
	CAIE	C,LF
	JRST	APCOL1
	MOVEM	D,NEWSEQ
	ADD	Q,[067777,,-1]	;back up byte pointer over new story beginning seen
	PUSH	P,Q
	MOVEI	E,4
	MOVE	R,[POINT 7,TMPBUF]
	ILDB	C,Q
	IDPB	C,R		;save new story beginning in TMPBUF
	SOJG	E,.-2
	POP	P,Q
	JRST	ENDIT1

RECOLL:	OUTFIV	BUF		;TYPE OUT SEQ NBR (4 CHARS FIRST TIME, THEREAFTER 5)
	MOVEI	E,ENDIT1
	MOVEM	E,EOFDSP
	MOVEI	E,ENDIT3
	MOVEM	E,EOSDSP
	PUSHJ	P,GETCH		;COLLECT CHARS UNTIL EOF OR END-OF-STORY
	JRST	.-1